Java+selenium如何定位隐藏元素

示例网址: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()");
原文地址:https://www.cnblogs.com/Shanghai-vame/p/8404354.html