如何通过与现有元素一起使用Selenium(Java)

如何通过与现有元素一起使用Selenium(Java),java,selenium,Java,Selenium,我尝试使用下面的selenium在父元素中查找子元素,这非常有效 ExpectedConditions.presenceOfNestedElementLocatedBy(parent, By.xpath(xpath)) 现在我想要一个返回所有与xPath匹配的元素的方法,但是令我惊讶的是,签名需要一个By,而不是WebElement 如何将我的WebElement转换为by以获取其他元素?下面是一个示例,您可以通过将传递给来获取所有子元素: public class Demo { s

我尝试使用下面的selenium在父元素中查找子元素,这非常有效

ExpectedConditions.presenceOfNestedElementLocatedBy(parent, By.xpath(xpath))

现在我想要一个返回所有与xPath匹配的元素的方法,但是令我惊讶的是,签名需要一个
By
,而不是
WebElement


如何将我的WebElement转换为by以获取其他元素?

下面是一个示例,您可以通过将
传递给
来获取所有子元素:

public class Demo {

    static WebDriver driver;

    public static void main(String[] args)
    {

        System.setProperty("webdriver.chrome.driver", "c:\\eclipse\\selenium\\chromedriver.exe");

        driver = new ChromeDriver();

        driver.get("http://google.com");


        By x = By.xpath("//div"); //or your By.xpath(xpath)
        List<WebElement> allItem = getChildElements(x);

        System.out.println(allItem.size());


        for(WebElement item : allItem){

            System.out.println(item.getText());
        }



    }

    public static List<WebElement> getChildElements(By x){

        List<WebElement> allElems = driver.findElements(x);
        return allElems;

    }
}
公共类演示{
静态网络驱动程序;
公共静态void main(字符串[]args)
{
System.setProperty(“webdriver.chrome.driver”,“c:\\eclipse\\selenium\\chromedriver.exe”);
驱动程序=新的ChromeDriver();
驱动程序。获取(“http://google.com");
By x=By.xpath(“//div”);//或您的By.xpath(xpath)
List allItem=getChildElements(x);
System.out.println(allItem.size());
对于(WebElement项:allItem){
System.out.println(item.getText());
}
}
公共静态列表getChildElements(按x){
列表等位基因ms=驱动程序findElements(x);
返回等位基因;
}
}

试着进行课堂教学,然后继续。代码看起来与此类似

WebElement parent = driver.findElement(By.xpath(""));
WebElement child = driver.findElement(By.xpath(""));
new WebDriverWait(driver, 10).until(ExpectedConditions.presenceOfNestedElementLocatedBy(parent, (By)child));

希望这对你有帮助。谢谢。

“令我惊讶的是,签名需要一个
By
”,哪个签名?@acdcjunior请查看“如何将我的WebElement转换为By以获取其他元素”的描述
中的链接,这在Villa selenium中是不可能的。也许我能做到。我知道如何使用By,这不是我的问题。当我有一个WebElement而不是Xpath字符串或元素名或任何其他名称时,如何使用byinfo@Jackie:但为了获得父元素,需要有某种定位器firstpresenceOfNestedElementsLocatedBy是我所说的,而不是presenceOfNestedElementLocatedBy。它要求家长是一个by。@Jackie是否该类角色转换对您不起作用?这已经在我最初发布的评论和类似内容中明确说明了(注意,我最初说我发布的代码可以正常工作)。我还没有尝试过强制转换,但我已经看过Java文档,我没有看到web元素由Java文档继承,或者反之亦然,但我今天将尝试确认。