Selenium Java:预期条件失败:等待元素可点击(Chrome浏览器)

agxfikkp  于 2023-08-01  发布在  Go
关注(0)|答案(1)|浏览(116)

我试图用Selenium写一个测试,但由于某种原因,我的wdwait代码行在下面的方法是失败的,并在标题错误消息。当我注解wdwait行时,测试正常通过。我错过了什么?
值得一提的是......在相同的测试中,我对Quantity Dropbox使用了几乎相同的方法,这里的wdwait工作得很好。这两个收存箱都是相同的“选择”类型。
searchBoxDropdown是amazon.com主页上搜索栏旁边的下拉列表

@FindBy(id="searchDropdownBox")
    WebElement searchBoxDropdown;

x

public void selectDropdownElement(String elementx) {
        wdwait.until(ExpectedConditions.elementToBeClickable(searchBoxDropdown));
        Select elementDropdown = new Select(searchBoxDropdown);
        elementDropdown.selectByVisibleText(elementx);
    }
@Test
    public void amazonTest() {
        amazonAddToCart.selectDropdownElement("Books");
        amazonAddToCart.inputSearchBox("Six of Crows Boxed Set");
        amazonAddToCart.clickBookLink();
        amazonAddToCart.selectHardcover();
        amazonAddToCart.selectQuantity(20);
        amazonAddToCart.clickGiftCheckbox();
        amazonAddToCart.clickAddToCart();
    }
<select aria-describedby="searchDropdownDescription" class="nav-search-dropdown searchSelect nav-progressive-attrubute nav-progressive-search-dropdown" data-nav-digest="k+fyIAyB82R9jVEmroQ0OWwSW3A=" data-nav-selected="0" id="searchDropdownBox" name="url" style="display: block; top: 2.5px;" tabindex="0" title="Search in">

的数据
我尝试将方法“elementToBeClickable”更改为“visibilityOfElements”,但结果相同。有没有类似的方法,允许选择WebElement,我可以使用也许?
此解决方案的工作方式与我想象的一样:

public void selectDropdownElement(String elementx) {
        wdwait.until(ExpectedConditions.textToBePresentInElement(searchBoxDropdown, "All"));
        Select elementDropdown = new Select(searchBoxDropdown);
        elementDropdown.selectByVisibleText(elementx);
    }

wmvff8tz

wmvff8tz1#

我不确定在这种情况下是否应该检查选择或可见性。当搜索栏被置于前面时,DOM中的元素被置于后面,因此方法可能会返回假阴性结果。
但你的观点是选择价值,对吗?此代码适用于我(我选择汽车价值)

driver.get("https://amazon.com");
WebDriverWait wdwait = new WebDriverWait(driver, 10);
By locator = new By.ById("searchDropdownBox");
WebElement dropdown = wdwait.until(ExpectedConditions.presenceOfElementLocated(locator));
Select elementDropdown = new Select(dropdown);
elementDropdown.selectByValue("search-alias=automotive-intl-ship"); //option value attribute

字符串
或者在你的实现中

@FindBy(id="searchDropdownBox")
    WebElement searchBoxDropdown;
    
 
public void selectDropdownElement(String value) {
  Select elementDropdown = new Select(searchBoxDropdown);
  elementDropdown.selectByValue(value);
}

相关问题