1

我需要知道单击选择输入中的选项时如何检查页面中的哪些更改。这是选择输入:

<select onchange="showCategory('category', 'carextras', 'company_ad', 'err_category');suggestCategory(document.formular.subject.value, this.value, 'subject-warning');" name="category" id="category">

单击一个选项,javascript 将根据用户单击的内容创建不同的输入类型(文本、选择和其他)。我需要知道如何获取页面中插入的输入。有人能帮我吗?有人可以给我一个建议吗?谢谢!!!:)

解决了(不好的方式),感谢JacekM,以这种方式:

WebElement cat =(new WebDriverWait(d, 1))
                .until(new ExpectedCondition<WebElement>(){
                    @Override
                    public WebElement apply(WebDriver d) {
                        return d.findElement(By.id("categoria"));
                    }}); 
        Select allCategory = new Select(cat);
        File f = new File("ebay1.txt");
        PrintWriter pw = new PrintWriter(f);
        pw.write("Categoria\n\t\tSottocategoria\n\t\t\t\tCampi\n");
        List<WebElement> categorie = allCategory.getOptions(); 
        for(int i=1;i<3;i++){
            pw.append(categorie.get(i).getText()+"\n");
            categorie.get(i).click();
            WebElement subcat =(new WebDriverWait(d, 1))
                    .until(new ExpectedCondition<WebElement>(){
                        @Override
                        public WebElement apply(WebDriver d) {
                            return d.findElement(By.id("sottocategoria"));
                        }}); 
            Select allSubCategory = new Select(subcat);
            List<WebElement> sottocategorie = allSubCategory.getOptions();
            sottocategorie.get(0).click();
            for(int j=1;j<sottocategorie.size();j++){
                List<WebElement> before = d.findElements(By.tagName("input"));
                List<WebElement> before_select = d.findElements(By.tagName("select"));
                List<WebElement> before_textarea = d.findElements(By.tagName("textarea"));
                List<String> before_inv = new ArrayList<String>();
                List<String> after_inv = new ArrayList<String>();
                for(WebElement bef : before){
                    if(bef.isDisplayed()){
                        String id = bef.getAttribute("id");
                        List<WebElement> labels = d.findElements(By.tagName("label"));
                        for(WebElement lab : labels){
                            if(lab.getAttribute("for").equals(id)){
                                before_inv.add(lab.getText());
                            }
                        }
                    }
                }
                for(WebElement bef : before_select){
                    if(bef.isDisplayed()){
                        String id = bef.getAttribute("id");
                        List<WebElement> labels = d.findElements(By.tagName("label"));
                        for(WebElement lab : labels){
                            if(lab.getAttribute("for").equals(id)){
                                before_inv.add(lab.getText());
                            }
                        }
                    }
                }
                for(WebElement bef : before_textarea){
                    if(bef.isDisplayed()){
                        String id = bef.getAttribute("id");
                        List<WebElement> labels = d.findElements(By.tagName("label"));
                        for(WebElement lab : labels){
                            if(lab.getAttribute("for").equals(id)){
                                before_inv.add(lab.getText());
                            }
                        }
                    }
                }

                sottocategorie.get(j).click();
                pw.append("\t\t"+sottocategorie.get(j).getText()+"\n");


                List<WebElement> after = d.findElements(By.tagName("input"));
                List<WebElement> after_select = d.findElements(By.tagName("select"));
                List<WebElement> after_textarea = d.findElements(By.tagName("textarea"));
                for(WebElement aft : after){
                    if(aft.isDisplayed()){
                        String id = aft.getAttribute("id");
                        List<WebElement> labels = d.findElements(By.tagName("label"));
                        for(WebElement lab : labels){
                            if(lab.getAttribute("for").equals(id)){
                                after_inv.add(lab.getText());
                            }
                        }
                    }
                }
                for(WebElement aft : after_select){
                    if(aft.isDisplayed()){
                        String id = aft.getAttribute("id");
                        List<WebElement> labels = d.findElements(By.tagName("label"));
                        for(WebElement lab : labels){
                            if(lab.getAttribute("for").equals(id)){
                                after_inv.add(lab.getText());
                            }
                        }
                    }
                }
                for(WebElement aft : after_textarea){
                    if(aft.isDisplayed()){
                        String id = aft.getAttribute("id");
                        List<WebElement> labels = d.findElements(By.tagName("label"));
                        for(WebElement lab : labels){
                            if(lab.getAttribute("for").equals(id)){
                                after_inv.add(lab.getText());
                            }
                        }
                    }
                }
                List<String> finale = new ArrayList<String>();
                for(String fin : after_inv){
                    if(!before_inv.contains(fin)){
                        finale.add(fin);
                    }
                }
                for(String fin:finale){
                    pw.append("\t\t\t\t"+fin.replace(":", "")+"\n");
                }
                sottocategorie.get(0).click();
            }
        }

        pw.close();
4

1 回答 1

1

乍一看您提供的页面似乎所有元素都存在于页面上,它们只是使用 style="display:none" 隐藏。因此,您可以检查元素的样式或可见性。

String style = element.getAttribute("style");
boolean visible = element.isDisplayed();

如果手动指定所有元素太困难,您可以尝试

List<WebElement> elements = driver.findElement(By.xpath("//some/xpath")).findElements(By.xpath(".//*"));

获取 //some/xpath 下的所有元素并在循环中调用我上面提到的方法。您可以创建一个仅存储布尔值的相同大小的列表 - 通过 element.isDisplayed() 方法获得的结果。然后,您可以将布尔值与元素的当前状态进行比较,以查看其中哪些已更改。

您还可以将所有不可见元素存储在数组中,然后每次单击页面上的某些内容时 - 遍历它们并查看其中哪一个发生了变化。

List<WebElement> elements = driver.findElement(By.xpath("//some/xpath")).findElements(By.xpath(".//*"));
List<WebElement> invisibles = new ArrayList<WebElement>();

for (WebElement elem : elements)
{
   if (!elem.isDisplayed())
   {
      invisibles.add(elem)
   }
}

//...

for (WebElement elem : invisibles)
{
   if (elem.isDisplayed())
   {
      //element has appeared
   }
}

这个解决方案的问题是它只会处理页面上出现的元素,而不是消失的元素。

于 2012-05-18T15:20:16.350 回答