自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">
有人检测到Chrome / Chromedriver 77类似问题吗?
关于某些解决方法的任何建议吗?
答案 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
中找到详细的讨论