示例网址:https://passport.zuche.com/
场景: 比如Login界面,输入密码的Input输入框被隐藏掉,定位到文本框运行时候提示“No such Element” ,导致脚本无法运行。
原图:
解决方案: 用JS去改变Style 属性, 将style="display:none" 变更为:style="display:block"
修改Style属性后的图: 会发现多了一个输入框,可输入密码
二、Featuer 示例:
@E-999 Scenario: E-999:如何定位隐藏元素定位 Given I login system Then I serach hidden Element 我的订单 Then I select Order date range |开始日期 | 结束日期 | |2018-01-01 | @today | Then I verify order information contains 还没租过车?
三、Step 示例:
1 @When("^I login system$") 2 public void login_system() throws Exception{ 3 hp.navigateToLoginPage(); 4 logger.info("I log in system with name: " + Const.USER_NAME + " password: " + Const.PASSWORD); 5 hp.login(Const.USER_NAME, Const.PASSWORD); 6 }
四: 关键代码page:
@FindBy(id="loginBt") private WebElement login_btn; /** * login EHR system * @param userName * @param pwd * @throws Exception */
/**
* login 神州租租车
* @param userName
* @param pwd
* @throws Exception
*/
public void login(String userName, String pwd) throws Exception {
//获得cookie
Set<Cookie> coo = driver.manage().getCookies();
//打印Cookie
logger.info(coo);
//清除所有的缓存
driver.manage().deleteAllCookies();
putInValue(waitFor(By.xpath("//input[@id='normal_id']")), userName);
String js = "document.getElementById('xpassword').style.display='block';";
WebDriverUtils.executeJS(""+ js +"", driver);
waitFor(By.xpath("//input[@id='xpassword']")).sendKeys(pwd);
login_btn.click();
Utils.waitABit(3000);
}
五: excuteJs封装代码
1 public static Object executeJS(String code, WebDriver driver) { 2 JavascriptExecutor executor = (JavascriptExecutor) driver; 3 return executor.executeScript(code); 4 }
六: 如何解决selenium自动化中click失效问题。
场景:明明定位到该元素,但无法操作该元素。 检查是否有动态属性元素,检查是否有引用js方法
解决方案一:
String js = "var XXX = document.getElementById('XXX').click";
WebDriverUtils.executeJS(""+ js +"", driver);
七: 元素有onlick 属性 有 Javascripts方法。
示例代码:
WebDriverUtils.executeJS("check()", driver);
JavascriptExecutor js = (JavascriptExecutor) driver;
js.executeScript("check()");