当前位置: 首页 > 知识库问答 >
问题:

ARIA-隐藏的span/button阻止提取元素-Selenium

楚俊迈
2023-03-14

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

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

要点击的目标-飞行-单向-“离开”按钮不管我尝试了什么可能的选项-by.id、by.xpath和Actions、EventFiringMouse等等,这个按钮根本不会被点击。

null

"<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>"

null

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’和点击按钮?

共有2个答案

孙和安
2023-03-14

试试按钮的xpath-

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

我在Firefox中检查了这个,它对我起作用了。

赵嘉纳
2023-03-14

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

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

让我知道,这对你是否有效。

 类似资料:
  • 本文向大家介绍js获取隐藏元素的宽高,包括了js获取隐藏元素的宽高的使用技巧和注意事项,需要的朋友参考一下 获取隐藏元素(display:none)的物理尺寸 问题及场景 假如我们有这样一个输入框,点击能展开选择。如下图: 在这里输入框和下方的展开区域是分离的,独立的两个控件!初始状态下面的可选框是隐藏的(ng-show=false) 展开区域中可折叠组件accordion(对应图中省份,排序字段

  •  有时候我们会碰到一些元素不可见,这个时候selenium就无法对这些元素进行操作了。例如,下面的情况: Python   页面主要通过“display:none”来控制整个下拉框不可见。这个时候如果直接操作这个下拉框,就会提示: from selenium import webdriverfrom selenium.webdriver.support.select import Selectim

  • 问题内容: 我在网页上遇到的一个常见问题是浮动div爬到了其容器之外。 有很多肮脏的方法可以解决此问题(将div插入clear:both) 我看到的一个更整洁的解决方案是将wrapper divs溢出样式设置为隐藏: 这在所有浏览器上都能很好地工作,并且干净利落,没有任何额外的标记。我很高兴,但我不知道为什么会起作用! 我看过的所有文档都表明溢出:隐藏是为了隐藏内容,而不是调整父级的大小以适合其子

  • 问题内容: 我在网页上遇到的一个常见问题是浮动div爬到了其容器之外。 有很多肮脏的方法可以解决此问题(将div插入clear:both) 我看到的一个更整洁的解决方案是将wrapper divs溢出样式设置为隐藏: 这在所有浏览器上都能很好地工作,并且干净利落,没有任何额外的标记。我很高兴,但我不知道为什么会起作用! 我看过的所有文档都表明溢出:隐藏是为了隐藏内容,而不是调整父级的大小以适合其子

  • 问题内容: 我正在尝试自动执行Google云端硬盘中的上传文件功能。 用于传递参数的元素以高度-0px隐藏。 用户操作均不会使该元素可见。因此,我需要一种变通方法来在不可见的元素上单击。 上述元素的xpath是- 我在用 例外- 元素当前不可见,因此可能无法与之交互。 我尝试使用JavascriptExecutor。但是找不到确切的语法。 问题答案: 试试这个: 上面的那堆将改变文件输入控件的可见

  • 问题内容: 嗨,我想知道如何使用Selenium WebDriver单击隐藏元素和/或禁用元素。 我知道使用selenium1可以执行以下操作: 这将起作用,但是对于selenium2(WebDriver),则不起作用。我不想使用jquery来启用或显示隐藏字段或JavaScript。这是因为大多数测试都使用xpath。 还是我只需要保留旧的selenium,就可以单击隐藏的字段? 问题答案: 使