java 检查元素的单击,然后等待元素被禁用并具有特定文本

g6baxovj  于 2023-06-28  发布在  Java
关注(0)|答案(1)|浏览(110)

我目前正在做一个java/selenium项目(由另一个开发人员编写),在这个项目中,我们循环遍历Excel表格中的元素及其属性,并根据条件执行一个操作(单击、鼠标悬停等)。有一个按钮元素,当点击时,它被禁用,在执行时显示不同的文本,然后保持禁用,但一旦数据加载到网页,按钮文本返回到原始状态,同时保持禁用。请参阅下面的快照,在单击之前,单击并等待数据加载之后,以及数据加载之后沿着元素的xpath:
之前:

等待时:

加载数据并完成处理后:

我下面的代码用于基于webElementType执行必要的操作,因为这是一个按钮。我想是能够等到这个按钮说“应用过滤器”,仍然有禁用属性。如何使用Java和Selenium来实现这一点?请参阅下面的代码,其中click(element)被调用,我正在等待这个特定的场景:

public void performAction() throws Throwable {
    List<Locator> allLocators = this.eachWebElement.getAllPossibleLocators();
    String webElementType = this.eachWebElement.getElementType();
    String logText = "";
    try {
        WebElement element = getSuitableWebElement(allLocators);
        List<WebElement> allElements = getSuitableWebElements(allLocators);
        if (webElementType.equalsIgnoreCase("textBox")) {
            logText = "to enter  " + this.eachWebElement.getInputValue() + " in "
                    + this.eachWebElement.getElementName() + " ";
            //                  System.out.println("TEXT BOX - Execute Step : " + this.eachWebElement.getElementName());
            enterText(element, this.eachWebElement.getInputValue().trim());
            //                  ExtentCustom.eachTest.log(Status.PASS, MarkupHelper.createLabel(logText, ExtentColor.GREEN));
            ExtentCustom.eachTest.pass(MarkupHelper.createLabel(logText, ExtentColor.GREEN));
        } else if ("radiobuttoncheckboxbuttonlink".contains(webElementType.toLowerCase())) {
            logText = "to click on " + this.eachWebElement.getElementName() + " ";
            //                  click(getSuitableWebElement(allLocators));
            click(element);
            //                  ExtentCustom.eachTest.log(Status.PASS, MarkupHelper.createLabel(logText, ExtentColor.GREEN));
            ExtentCustom.eachTest.pass(MarkupHelper.createLabel(logText, ExtentColor.GREEN));
        } else if (webElementType.equalsIgnoreCase("movemouse")) {
            logText = " mouse is moved to " + this.eachWebElement.getElementName();
            //                  moveMouse(getSuitableWebElement(allLocators));
            //                  System.out.println(" mouse is moved to ");
            moveMouse(element);
            //                  ExtentCustom.eachTest.log(Status.PASS, MarkupHelper.createLabel(logText, ExtentColor.GREEN));
            ExtentCustom.eachTest.pass(MarkupHelper.createLabel(logText, ExtentColor.GREEN));
        } else if (webElementType.equalsIgnoreCase("fileupload")) {
            logText = " file is uploaded to " + this.eachWebElement.getElementName();
            //                  moveMouse(getSuitableWebElement(allLocators));
            //                  System.out.println(" fileupload code " + this.eachWebElement.getInputValue());
            //                  System.out.println(allLocators);
            uploadFile(element, this.eachWebElement.getInputValue());
            //                  ExtentCustom.eachTest.log(Status.PASS, MarkupHelper.createLabel(logText, ExtentColor.GREEN));
            ExtentCustom.eachTest.pass(MarkupHelper.createLabel(logText, ExtentColor.GREEN));
        } else {
            boolean selectedStatus = selectFromDropdown(allElements, this.eachWebElement.getInputValue().trim());
            Assert.assertTrue(selectedStatus, this.eachWebElement.getInputValue().trim() + " not able to select, might be element value to select is wrong");
            logText = "value " + eachWebElement.getInputValue().trim() + " got selected from the dropdown : "
                    + this.eachWebElement.getElementName();
            //              ExtentCustom.eachTest.log(Status.PASS, MarkupHelper.createLabel(logText, ExtentColor.GREEN));
            ExtentCustom.eachTest.pass(MarkupHelper.createLabel(logText, ExtentColor.GREEN));
        }
    } catch (Throwable t) {
        throw t;
    } finally {
        // ExtentCustom.logResult(reportStatusLogger, logText);
    }
}
zmeyuzjn

zmeyuzjn1#

这可能不是最终的解决方案。请记住,我没有工作的用户界面太多看。我会根据你的回答来帮助你。
据我所知我们需要
1.等待“应用筛选器”更改为“搜索产品...”。
1.然后等待“搜索产品...”变为不可见(可选)
1.然后等待“应用过滤器”再次出现。

WebDriverWait webDriverWait = new WebDriverWait(driver, Duration.ofSeconds(30));
 webDriverWait.until(visibilityOfElementLocated(By.xpath("//div[starts-with(normalize-space(),'Searching Product')]")));
 webDriverWait.until(invisibilityOfElementLocated(By.xpath("//div[starts-with(normalize-space(),'Searching Product')]"))); //This can be removed if works without it.
 webDriverWait.until(visibilityOfElementLocated(By.xpath("//div[starts-with(normalize-space(),'Apply Filter')]")));

请让我知道如果有任何问题发生。

相关问题