设置Webdriver启动chrome为默认用户的配置信息
Webdriver 启动Chrome浏览器时,默认是打开一个新用户,而非默认用户,即新用户没有我们安装扩展程序。但在实际应用中,我们会需要 默认用户安装的一些扩展程序,比如对于某些js或者css样式,需要代理才能访问成功,使用默认用户就显得尤为重要(因为你不可能在新用户在安装扩展程序再继续测试)。
如图:
a)默认用户的扩展:
在锁定chrome的任务栏打开的状态:
b) WebDriver打开的新用户的扩展:
在锁定chrome的任务栏打开的状态:
-----------------------------------------------------------------正文------------------------------------------------------------------------
版本说明:Selenium 2.0
Chrome: 34.0.1847.116 m
系统:Windows 7 x86
解决办法:
//设置Webdriver启动chrome为默认用户的配置信息(包括书签、扩展程序等) ChromeOptions options = new ChromeOptions(); options.addArguments("user-data-dir=C:/Users/user_name/AppData/Local/Google/Chrome/User Data"); WebDriver driver = new ChromeDriver(options);
注意:上例中user_name为 你计算机的用户名。
ps:网上搜的答案好多是 在路径 User_Data又添加了一个default,但经过我测试是打开的chrome仍然是新用户。
附参考代码:
说明:
(1)请保证chromedriver路径正确;
(2) status.html 中不走代理的话 js:src="http://ajax.googleapis.com/ajax/libs/jquery/1.9.1/jquery.min.js" 是无法加载成功;js加载成功,则页面的radio为选中状态。
(3)保证代理设置正常。
Browser_Chrome.java
package test; import org.testng.annotations.Test; import org.openqa.selenium.By; import org.openqa.selenium.JavascriptExecutor; import org.openqa.selenium.WebDriver; import org.openqa.selenium.WebElement; import org.openqa.selenium.chrome.ChromeDriver; import org.openqa.selenium.chrome.ChromeOptions; public class Browser_Chrome { @Test public void test() throws InterruptedException{ System.setProperty("webdriver.chrome.driver", "D:/SETEST/selenium/chromedriver.exe"); //设置Webdriver启动chrome为默认用户的配置信息(包括书签、扩展程序等) ChromeOptions options = new ChromeOptions(); options.addArguments("user-data-dir=C:/Users/test/AppData/Local/Google/Chrome/User Data"); WebDriver driver = new ChromeDriver(options); driver.get("D:/SETEST/selenium/status-test.html"); WebElement radio = driver.findElement(By.name("radio")); ((JavascriptExecutor)driver).executeScript("$('#radio').click();"); System.out.println(radio.isSelected()); Thread.sleep(2000); //driver.close(); //driver.quit(); } }
status-test.html
<!DOCTYPE html> <html> <head> <meta http-equiv="content-type" content="text/html;charset=utf-8" /> <title>status</title> <script type="text/javascript" async="" src="http://ajax.googleapis.com/ajax/libs/jquery/1.9.1/jquery.min.js"></script> <link href="http://netdna.bootstrapcdn.com/twitter-bootstrap/2.3.2/css/bootstrap-combined.min.css" rel="stylesheet" /> <body> <h3>status</h3> <div class="row-fluid"> <div class="span3"> <input name="user" placeholder="Disabled TextField" disabled /> </div> <div class="span3"> <a class="btn disabled">Disabled Button</a> </div> <div class="span3"> <input name="radio" type="radio" id="radio" /> <input name="display" style="display:none" /> </div> </div> </body> <script src="http://netdna.bootstrapcdn.com/twitter-bootstrap/2.3.2/js/bootstrap.min.js"></script> </html>
运行截图(注意扩展程序 和 radio的选中状态——F12开发者工具——可以直接访问js脚本)
--------------------------------------------------------------------------------------------------------------------------------------------------------
附打开新用户chrome加载失败的code和截图:
Browser_Chrome.java(加载失败的code)
package test; import org.testng.annotations.Test; import org.openqa.selenium.By; import org.openqa.selenium.JavascriptExecutor; import org.openqa.selenium.WebDriver; import org.openqa.selenium.WebElement; import org.openqa.selenium.chrome.ChromeDriver; public class Browser_Chrome { @Test public void test() throws InterruptedException{ System.setProperty("webdriver.chrome.driver", "D:/SETEST/selenium/chromedriver.exe"); WebDriver driver = new ChromeDriver(); driver.get("D:/SETEST/selenium/status-test.html"); WebElement radio = driver.findElement(By.name("radio")); ((JavascriptExecutor)driver).executeScript("$('#radio').click();"); System.out.println(radio.isSelected()); Thread.sleep(2000); //driver.close(); //driver.quit(); } }
运行截图(加载失败,js打开为空):
参考:链接1
郑重声明:本站内容如果来自互联网及其他传播媒体,其版权均属原媒体及文章作者所有。转载目的在于传递更多信息及用于网络分享,并不代表本站赞同其观点和对其真实性负责,也不构成任何其他建议。