gpt4 book ai didi

java - 如何将所有不同类型的定位器(xpath、Css、Link、ID 等)存储在 selenium Web 驱动程序的单个变量中

转载 作者:行者123 更新时间:2023-12-01 09:03:05 26 4
gpt4 key购买 nike

我想将所有不同类型的定位器*(xpath、Css、Link、ID 等)* 存储在一个变量中,并对其执行一些操作,如下面的语句所示。

webdriver.findelement(variable).click();”这里的变量可以是“by.id,by.xpath,by.css..etc”我已经编写了下面的代码,但在将字符串转换为 Web 元素以对其执行某些操作时遇到了困难。

public void Element(){          
try{
String locator = new String("xpath=//div[@id='pageTitle']");
if(locator.startsWith("//"))
System.out.println("Locator value if
starts with slash is\t" +locator);
else
{
if(locator.contains("=")){
String retnval[] = locator.split("=");
String type = "findElement(By."+retnval[0]+"(";
int index= locator.indexOf("=");
locator=locator.substring((index)+1);
String element =type.concat(locator+")");
System.out.println(element);
getElement.click();
}
}
}
catch (Exception e){
System.out.println(e);
}
}

输出是:

findElement(By.xpath(//div[@id='pageTitle'])

我知道下面的代码,但想尝试一些不同的东西,而无需在我的代码中使用定位器类型(xpath,id,css,name等)或帮助我知道如何转换字符串到 Web 元素。

if(locator.contains("xpath="))
locator = locator.substring(6);
webDrvElement = webDriver.findElement(By.xpath(locator));
}
else if(locator.contains("id=")){
locator = locator.substring(3);
webDrvElement = webDriver.findElement(By.id(locator));
}
else if(locator.contains("name=")){
locator = locator.substring(5);
webDrvElement = webDriver.findElement(By.name(locator));
}
else if(locator.contains("css=")){
locator = locator.substring(4);
webDrvElement = webDriver.findElement(By.cssSelector(locator));
}

最佳答案

这可以通过使用反射来实现,如下所示:-

 String locator = "xpath=//li[@id='menu-item-72']/a";
String[] locatorValArr = locator.split("=");

String locatorType = locatorValArr[0];
String locatorValue = "";
for(int i = 1; i < locatorValArr.length; i++)
locatorValue += locatorValArr[i]+"=";
locatorValue = locatorValue.replaceAll("\\=$", "");

Class byClass = Class.forName(By.class.getName());
Method getMethodBy = byClass.getMethod(locatorType, String.class);
By newById = (By) getMethodBy.invoke(null, locatorValue);

driver.findElement(newById).click();

我们可以用同样的方法来处理 cssSelector、name、class、id 和其他定位器类型

关于java - 如何将所有不同类型的定位器(xpath、Css、Link、ID 等)存储在 selenium Web 驱动程序的单个变量中,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41522045/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com