【问题标题】:aria-hidden span/button prevents from fetching element - Seleniumaria-hidden span/button 防止获取元素 - Selenium
【发布时间】:2017-09-16 11:16:08
【问题描述】:

我正在尝试使用 Selenium 和 Java(3.3.0 和 java 版本“1.8.0_66”)从以下网站单击日历。

https://www.cathaypacific.com/cx/en_US.html

要点击的目标 - 航班 - 一种方式 - “起飞”按钮 不管我尝试了哪些可能的选项——by.id、by.xpath 和 Actions、EventFiringMouse 等,这个按钮根本不会被点击。

"<div class="button-date-picker-wrapper field-group cx-inputfield">
<span class="field-label input-filled" aria-hidden="true">Departing on</span>
<button id="dppju1sm" class="button-date-picker field-button from-button has-dates input-filled" role="link" type="button" data-ui-overlay-shared="true" data-ui-overlay-id="trip-dates-picker" aria-expanded="false" aria-label="Departing on Thursday 20 April 2017">
</div>"
private static void pickFlightCode() throws InterruptedException {

    WebElement element = driver.findElement(By.xpath("//div[1]/button[starts-with(@id,'dp')]"));
    //wdwait.until(ExpectedConditions.elementToBeClickable(element));
    Actions actions=new Actions(driver);
    actions.moveToElement(element).moveToElement(driver.findElement(By.xpath("//div[1]/button[starts-with(@id,'dp')]"))).click().build().perform();
    element = driver.findElement(By.xpath("//div[1]/button[starts-with(@id,'dp')]"));
    System.out.println(element.getAttribute("aria-hidden"));

}

(或)

driver.findElement(By.xpath("//div[1]/button[starts-with(@id,'dp')]")).click(); String js = "document.getElementById("field-label").style.display = "block";'; arguments[0].style.visibility='visible';";

上面的代码不起作用,我收到“元素不可见”异常。 Driver.findElement - isEnabled 返回 true,Driver.findElement - isDisplayed 返回 false。

这与 span 中的 'aria-hidden'=true 属性有关吗?我们应该如何处理'aria-hidden'并点击按钮?

【问题讨论】:

    标签: java html selenium


    【解决方案1】:

    为了达到所需的控件,您可以使用它的容器。因此,请尝试以下操作:

    //div[@data-date-picker-id='book-trip']//button[starts-with(@id,'dp') and starts-with(@aria-label, 'Departing on ')]
    

    让我知道它是否适合您。

    【讨论】:

    • 完美!!它工作..谢谢。顺便说一句,这个 XPath 看起来像嵌套的 xpath,其中我们不仅指的是两个位置,即 //div[..] //button[..],而且还嵌套了starts-with。对我来说很好的学习..谢谢
    【解决方案2】:

    试试这个按钮的 xpath -

    //div[@class = 'dates-picker-wrapper splited-date-picker flight-datepicker']/div[1]/button
    

    我已经在 Firefox 中检查了这个,它对我有用。

    【讨论】:

    • 学习并尝试了其他一些示例,并认为 Selenium 不支持“复合类名”。这就是为什么我避免使用带有空格的类名,或者即使我必须使用它们,我也使用类名的子字符串。但是即使类名有空格,您的 xpath 也能正常工作。但是怎么做?我是否误解了 Selenium 中的“复合类名异常”
    【解决方案3】:

    试试这个 JavaScript 代码来启用所选元素的可见性。

    WebElement element = driver.findElement(By.xpath("Element Xpath"));
    String js = "arguments[0].style.height='auto'; arguments[0].style.visibility='visible';";
    ((JavascriptExecutor) driver).executeScript(js, elem);
    

    【讨论】:

    • 这个对我不起作用:(。这段代码要么没有抛出错误,要么没有点击按钮。我用的是旧的 element.xpath:WebElement element = driver.findElement(By.xpath(" //div[1]/button[starts-with(@id,'dp')]")); String js = "arguments[0].style.height='auto'; arguments[0].style.visibility ='visible'"; ((JavascriptExecutor) driver).executeScript(js, element);
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-12-08
    • 1970-01-01
    相关资源
    最近更新 更多