在element.getAttribute('id')上使用Selenium Java和chromedriver 77会出错吗?

时间:2019-09-25 11:41:14

标签: selenium selenium-webdriver selenium-chromedriver webdriverwait google-chrome-headless

自Google Chrome 77发行以来,我更新了CI流程,因此可以使用以下方法完成无头自动化测试:

一个完美工作的简单代码不再起作用,因为 element.getAttribute('id')返回null 而不是HTML元素的id属性的字符串值(已找到)使用By.id()!)

我在Windows和Linux(docker)上尝试了这样的配置,结果是相同的:getAttribute('id')返回null而不是HTML元素id

重现该问题的简化代码:

String myId = "myInputTypeDateId" ;
WebElement element = (new WebDriverWait(driver, timeout)).until(ExpectedConditions.presenceOfElementLocated(By.id(id)));
String eltId = element.getAttribute("id");
// With chrome 76 & chromedriver 76: returns "myInputTypeDateId"
// With chrome 77 & chromedriver 77: returns null

其他信息:

  • 与问题相关的元素是<input type = "date">
  • 我正在使用Aura组件框架(Salesforce Lightning)

有人检测到Chrome / Chromedriver 77类似问题吗?

关于某些解决方法的任何建议吗?

2 个答案:

答案 0 :(得分:1)

这似乎是chromedriver和Salesforce之间的兼容性错误

chromedriver 78中已解决该问题,但使其与Chrome 77配合使用的唯一方法似乎是将chromedriver 76与chrome 77一起使用

我们有几个用户要求chromedriver 77补丁,但尚未提供

此处有更多详细信息:https://bugs.chromium.org/p/chromedriver/issues/detail?id=3103#c6

答案 1 :(得分:0)

要在尝试从getAttribute()元素调用<input>时提取 id 属性,而不是使用presenceOfElementLocated(),则需要引入用于visibility_of_element_located()element_to_be_clickable()的WebDriverWait ,您可以使用以下Locator Strategies之一:

  • 使用visibilityOfElementLocated()

    System.out.println(new WebDriverWait(driver, 20).until(ExpectedConditions.visibilityOfElementLocated(By.id("myInputTypeDateId"))).getAttribute("id"));
    
  • 使用elementToBeClickable()

    System.out.println(new WebDriverWait(driver, 20).until(ExpectedConditions.elementToBeClickable(By.id("myInputTypeDateId"))).getAttribute("id"));
    
  

您可以在Java Wrapper method for waiting for element to be available for Apache Cordova Webview driven App

中找到详细的讨论