在 selenium 测试中遇到 ng select 框的问题
Having trouble with ng select boxes in selenium testing
我目前正在尝试测试使用 ionic 进行前端实现的网站中的某个元素。
我被这个使用 ng-select
列表框的元素卡住了。
我试图找到各种不同的答案并尝试了许多不同的方法组合,但仍然没有运气。目前我的代码通过 xpath 找到这个元素。
我尝试过的:
Selectclass,不起作用,
的错误信息
element of type ng select not select
.click()
,总是得到
的错误信息
"Element is not clickable at point..."
Javascript 执行者点击,没有任何反应。
.sendKeys()
,"cannot focus element" 或 "element is not of type input"
还有其他一些人...
我的选择已经结束了。我不知道如何与这个盒子互动。还有其他有效的方法吗?
此外,我对我应该与哪个元素进行交互感到困惑?我在 ngInput
上尝试了 sendKeys
但它不接受输入。我在 ng-select.
上尝试了 Select
我的主要目的是模拟点击所述元素,就像用户从下拉列表中选择一样。
下面是特定元素的 HTML 代码,用 ionic 编码。
<ng-select class="ng-select ng-select-single ng-pristine ng-valid ng-select-bottom ng-touched"
formcontrolname="productBrand" role="listbox">
<div class="ng-select-container ng-has-value">
<div class="ng-value-container">
<div class="ng-placeholder"></div>
<!----><!---->
<!----><div class="ng-value disabled">
<!---->
<!---->
<span aria-hidden="true" class="ng-value-icon left">×</span>
<span class="ng-value-label">Select from list
</span>
</div>
<!---->
<!----><div class="ng-input">
<!----><div role="combobox" tabindex="0" aria-expanded="false">
</div>
<!---->
</div>
</div>
<!---->
<!----><span class="ng-clear-wrapper" title="Clear all">
<span aria-hidden="true" class="ng-clear">×</span>
</span>
<span class="ng-arrow-wrapper">
<span class="ng-arrow"></span>
</span>
</div>
<!---->
</ng-select>
感谢任何帮助!
尽管 x 路径可能有不同的变体,但以下更容易理解,因为元素是整个已发布代码中的第一个具体元素:
driver.findElement(By.xpath("//span[contains(.,'Select from list')]")).click();
更新#1:
1) 尝试在点击之前添加一些等待时间:
WebDriverWait wait = new WebDriverWait(driver, 10);
wait.until(ExpectedConditions.elementToBeClickable(driver.findElement(By.xpath("//span[contains(.,'Select from list')]"))));
driver.findElement(By.xpath("//span[contains(.,'Select from list')]")).click();
2) 您也可以尝试使用 Javascript 执行器:
((JavascriptExecutor) driver).executeScript("arguments[0].click();", driver.findElement(By.xpath("//span[contains(.,'Select from list')]")));
尝试使用动作点击 class :
WebElement selectBox = driver.findElements(By.xpath("//span[contains(.,'Select from list')]")).get(1);
public static void actionClick(WebDriver driver, WebElement element) {
Actions actions = new Actions(driver);
actions.moveToElement(element).click().build().perform();
}
现在,如果正常点击不起作用,那么您可以使用操作 class 或
元素 "selectBox"
上的 JavascriptExecutor
我目前正在尝试测试使用 ionic 进行前端实现的网站中的某个元素。
我被这个使用 ng-select
列表框的元素卡住了。
我试图找到各种不同的答案并尝试了许多不同的方法组合,但仍然没有运气。目前我的代码通过 xpath 找到这个元素。
我尝试过的:
Selectclass,不起作用,
的错误信息element of type ng select not select
.click()
,总是得到
"Element is not clickable at point..."
Javascript 执行者点击,没有任何反应。
.sendKeys()
,"cannot focus element" 或 "element is not of type input"
还有其他一些人...
我的选择已经结束了。我不知道如何与这个盒子互动。还有其他有效的方法吗?
此外,我对我应该与哪个元素进行交互感到困惑?我在 ngInput
上尝试了 sendKeys
但它不接受输入。我在 ng-select.
我的主要目的是模拟点击所述元素,就像用户从下拉列表中选择一样。
下面是特定元素的 HTML 代码,用 ionic 编码。
<ng-select class="ng-select ng-select-single ng-pristine ng-valid ng-select-bottom ng-touched"
formcontrolname="productBrand" role="listbox">
<div class="ng-select-container ng-has-value">
<div class="ng-value-container">
<div class="ng-placeholder"></div>
<!----><!---->
<!----><div class="ng-value disabled">
<!---->
<!---->
<span aria-hidden="true" class="ng-value-icon left">×</span>
<span class="ng-value-label">Select from list
</span>
</div>
<!---->
<!----><div class="ng-input">
<!----><div role="combobox" tabindex="0" aria-expanded="false">
</div>
<!---->
</div>
</div>
<!---->
<!----><span class="ng-clear-wrapper" title="Clear all">
<span aria-hidden="true" class="ng-clear">×</span>
</span>
<span class="ng-arrow-wrapper">
<span class="ng-arrow"></span>
</span>
</div>
<!---->
</ng-select>
感谢任何帮助!
尽管 x 路径可能有不同的变体,但以下更容易理解,因为元素是整个已发布代码中的第一个具体元素:
driver.findElement(By.xpath("//span[contains(.,'Select from list')]")).click();
更新#1:
1) 尝试在点击之前添加一些等待时间:
WebDriverWait wait = new WebDriverWait(driver, 10);
wait.until(ExpectedConditions.elementToBeClickable(driver.findElement(By.xpath("//span[contains(.,'Select from list')]"))));
driver.findElement(By.xpath("//span[contains(.,'Select from list')]")).click();
2) 您也可以尝试使用 Javascript 执行器:
((JavascriptExecutor) driver).executeScript("arguments[0].click();", driver.findElement(By.xpath("//span[contains(.,'Select from list')]")));
尝试使用动作点击 class :
WebElement selectBox = driver.findElements(By.xpath("//span[contains(.,'Select from list')]")).get(1);
public static void actionClick(WebDriver driver, WebElement element) {
Actions actions = new Actions(driver);
actions.moveToElement(element).click().build().perform();
}
现在,如果正常点击不起作用,那么您可以使用操作 class 或 元素 "selectBox"
上的 JavascriptExecutor