如何将字符串转换为By类型

如何将String转换为By类型。

以下是我的方案:以下面的方式在对象文件中保持对象标识

username=By.id("username") password=By.id("password") 

在应用程序中,我想检索像这样的值

 Properties prop=new Properties(); prop.load("above properties file path") 

driver.findelement(prop.getProperty("username")) //在eclipse中,它抱怨说“WebDriver类型中的方法findElement(By)不适用于参数(String)”

那么有人可以帮助我吗?

我可以使用下面或其他一些格式,但我想要上面的解决方案

 username="//*[@id='username']" username="username" driver.findElement(By.xpath(prop.getProperty("username")) driver.findElement(By.id(prop.getProperty("username")) 

您可以创建一个解析器方法,它将返回所需的定位器对象,如下所示:

 public static By locatorParser(String locator) { By loc = By.id(locator); if (locator.contains("id")) loc = By.id(locator.substring(locator.indexOf("\"") + 1, locator.length() - 2)); else if (locator.contains("name")) loc = By.name(locator.substring(locator.indexOf("\"") + 1, locator.length() - 2)); if (locator.contains("xpath")) loc = By.xpath(locator.substring(locator.indexOf("\"") + 1, locator.length() - 2)); return loc; } 

可以通过以下方式在代码中调用:

 driver.findElement(locatorParser(prop.getProperty("username"))); 

添加了id,name,xpath的逻辑。 您可以修改相同的方法来添加所有可用的定位器。 希望这可以帮助!

WebDriver.findElement方法仅接受By类型的对象参数。 Property.getProperty方法仅返回String类型的对象。

因此,这可能适合您的需要:

 WebElement element = driver.findElement(By.name(prop.getProperty("username"))); 

您不能将String类型对象强制转换为仅接受By类型对象的方法。 当你要求Selenium找到一个字符串“用户名”时,你必须告诉它不仅仅是字符串的值。

你选择的方法By。[方法]取决于你在Selenium搜索的页面中寻找的内容。 “username”很可能是您要查找的字段的“name”(By.name)或“id”(By.Id)。 By类将搜索精炼到您期望String“username”的位置:名称,id,标记,类等。请参阅By类定义 。

另外,请注意,因为getProperty方法可能返回null,而By方法会抛出IllegalArgumentException,如果你传递一个空字符串。 因此,为getProperty提供默认返回值(“”)通常更安全。

 WebElement element = driver.findElement(By.name(prop.getProperty("username", ""))); 

您必须在现有代码的上下文中评估整个表达式。 您应该使用JEXL或expressionoasis等框架

下面的代码使用JEXL

 // Create JexlEngine instance JexlEngine jexl = new JexlEngine(); // Create Expression object for the string Expression e = jexl.createExpression(prop.getProperty("username")); // Create a context. You can pass reference to any object you want to use inside the expression JexlContext jc = new MapContext(); // Now evaluate the expression, getting the result driver.findElement((By)e.evaluate(jc)); 

我认为您正在尝试使用属性文件实现页面对象模型。 我建议使用xml文件而不是java属性文件。 例如,页面元素的样本xml如下所示。

   username password   

现在,您可以编写方法从xml文件和节点属性中检索节点作为id,xpath等…进一步编写方法以使用xml节点值和属性查找元素。 我在我的项目中使用了相同的方法,因为它对我很有用。