如何使用带 Java 的 Selenium WebDriver 将一个 class 值传递给另一个 class?
How can I pass one class value into another class using Selenium WebDriver with Java?
我有一个 class 如下:
public class 模块 3 {
public static void main(String[] args) throws InterruptedException {
WebDriver driver = new FirefoxDriver();
driver.manage().window().maximize();
findElement1 a = new findElement1();
driver.get("webAddress");
driver.findElement(By.xpath("//*[@id='Username']")).sendKeys("A1");
driver.findElement(By.xpath("//*[@id='Password']")).sendKeys("1");
driver.findElement(By.xpath("//*[@id='loginBox']/form/p/button")).click();
Thread.sleep(2000L);
driver.findElement(By.xpath("//*[@id='mainNav']/li[2]/a")).click();
Thread.sleep(2000L);
driver.findElement(By.xpath("//*[@id='addNewEntryButton']")).click();
WebElement dropdown = driver.findElement(By.xpath("//*[@id='timeEntryTable']/tbody/tr[1]/td[1]/select"));
List<WebElement> dropOptions = dropdown.findElements(By.tagName("Option"));
for (int i=0; i<dropOptions.size(); i++)
{
System.out.println(dropOptions.get(i).getText());
}
Thread.sleep(2000L);
driver.findElement(By.xpath("//*[@id='timeEntryTable']/tbody/tr[1]/td[1]/select")).sendKeys(Keys.ARROW_DOWN);
driver.findElement(By.xpath("//*[@id='timeEntryTable']/tbody/tr[1]/td[5]/input")).sendKeys("5");
driver.findElement(By.xpath("//*[@id='timeEntryTable']/tbody/tr[1]/td[6]/input")).sendKeys("5");
driver.findElement(By.xpath("//*[@id='saveEntryButton']")).click();
Thread.sleep(5000L);
driver.findElement(By.xpath("html/body/div[2]/div[2]/div[2]/div/div[3]/div/header/div/button[4]")).click();
driver.manage().timeouts().implicitlyWait(15, TimeUnit.SECONDS);
a.findValue();
driver.findElement(By.xpath("//button[contains(.,'submit')]")).click();
}
}
第 2 类:
public class FindElement1 {
静态 WebDriver 驱动程序 = new FirefoxDriver();
public void findValue() {
driver.get("webaddress");
By by = By.xpath("//button[contains(.,'submit')]");
isElementPresent(by);
driver.findElement(By.xpath(""));
}
public boolean isElementPresent(By by){
try{
driver.findElements(by);
System.out.println("execute");
return true;
}
catch(NoSuchElementException e){
return false;
}
}
}
我想在a.findValue()提到的地方用class1的值对class1执行class2的操作;是否可以通过class1 的驱动值变为 class2
当然可以。只需从第二个 class 中删除 WebDriver 的静态关键字,然后使用 WebDriver 创建一个 setter 或构造函数。
在您的第一个 class 中实例化它并使用您的 setter 或构造函数设置 WebDriver。
创建一个 Common class,可以在其中保存常见的东西并用于任何 class:
package keya;
import org.openqa.selenium.NoSuchElementException;
import org.openqa.selenium.WebDriver;
import org.openqa.selenium.firefox.*;
import org.openqa.selenium.By;
public class Common {
protected static WebDriver driver;
public Common(){
driver = new FirefoxDriver();
driver.manage().window().maximize();
}
public boolean isElementPresent(By by){
try{
driver.findElement(by);
return true;
}
catch(NoSuchElementException e){
return false;
}
}
}
你正在测试模块3,代码应该如下:
package keya;
import java.util.List;
import org.openqa.selenium.By;
import org.openqa.selenium.Keys;
import org.openqa.selenium.WebElement;
public class Module3 extends Common{
public static void main(String...strings) throws Exception{
Common c = new Common();
driver.get("webAddress");
driver.findElement(By.xpath("//*[@id='Username']")).sendKeys("A1");
driver.findElement(By.xpath("//*[@id='Password']")).sendKeys("1");
driver.findElement(By.xpath("//*[@id='loginBox']/form/p/button")).click();
Thread.sleep(2000L);
driver.findElement(By.xpath("//*[@id='mainNav']/li[2]/a")).click();
Thread.sleep(2000L);
driver.findElement(By.xpath("//*[@id='addNewEntryButton']")).click();
WebElement dropdown = driver.findElement(By.xpath("//*[@id='timeEntryTable']/tbody/tr[1]/td[1]/select"));
List<WebElement> dropOptions = dropdown.findElements(By.tagName("Option"));
for (int i=0; i<dropOptions.size(); i++)
{
System.out.println(dropOptions.get(i).getText());
}
Thread.sleep(2000L);
driver.findElement(By.xpath("//*[@id='timeEntryTable']/tbody/tr[1]/td[1]/select")).sendKeys(Keys.ARROW_DOWN);
driver.findElement(By.xpath("//*[@id='timeEntryTable']/tbody/tr[1]/td[5]/input")).sendKeys("5");
driver.findElement(By.xpath("//*[@id='timeEntryTable']/tbody/tr[1]/td[6]/input")).sendKeys("5");
driver.findElement(By.xpath("//*[@id='saveEntryButton']")).click();
Thread.sleep(5000L);
driver.findElement(By.xpath("html/body/div[2]/div[2]/div[2]/div/div[3]/div/header/div/button[4]")).click();
//Here is the verification whether Submit button is present or not
c.isElementPresent(By.xpath("//button[contains(.,'submit')]"));
//Rest of the code is here
}
}
因此您可以对任意数量的 class/module 使用 Common class 的 isElementPresent() 方法。您可以通过扩展 Common class 来编写更多 class,这样您就可以使用一些常用方法,并且 WebDriver 仅在 Common class.
中被实例化一次
我有一个 class 如下:
public class 模块 3 {
public static void main(String[] args) throws InterruptedException {
WebDriver driver = new FirefoxDriver();
driver.manage().window().maximize();
findElement1 a = new findElement1();
driver.get("webAddress");
driver.findElement(By.xpath("//*[@id='Username']")).sendKeys("A1");
driver.findElement(By.xpath("//*[@id='Password']")).sendKeys("1");
driver.findElement(By.xpath("//*[@id='loginBox']/form/p/button")).click();
Thread.sleep(2000L);
driver.findElement(By.xpath("//*[@id='mainNav']/li[2]/a")).click();
Thread.sleep(2000L);
driver.findElement(By.xpath("//*[@id='addNewEntryButton']")).click();
WebElement dropdown = driver.findElement(By.xpath("//*[@id='timeEntryTable']/tbody/tr[1]/td[1]/select"));
List<WebElement> dropOptions = dropdown.findElements(By.tagName("Option"));
for (int i=0; i<dropOptions.size(); i++)
{
System.out.println(dropOptions.get(i).getText());
}
Thread.sleep(2000L);
driver.findElement(By.xpath("//*[@id='timeEntryTable']/tbody/tr[1]/td[1]/select")).sendKeys(Keys.ARROW_DOWN);
driver.findElement(By.xpath("//*[@id='timeEntryTable']/tbody/tr[1]/td[5]/input")).sendKeys("5");
driver.findElement(By.xpath("//*[@id='timeEntryTable']/tbody/tr[1]/td[6]/input")).sendKeys("5");
driver.findElement(By.xpath("//*[@id='saveEntryButton']")).click();
Thread.sleep(5000L);
driver.findElement(By.xpath("html/body/div[2]/div[2]/div[2]/div/div[3]/div/header/div/button[4]")).click();
driver.manage().timeouts().implicitlyWait(15, TimeUnit.SECONDS);
a.findValue();
driver.findElement(By.xpath("//button[contains(.,'submit')]")).click();
}
}
第 2 类:
public class FindElement1 { 静态 WebDriver 驱动程序 = new FirefoxDriver();
public void findValue() {
driver.get("webaddress");
By by = By.xpath("//button[contains(.,'submit')]");
isElementPresent(by);
driver.findElement(By.xpath(""));
}
public boolean isElementPresent(By by){
try{
driver.findElements(by);
System.out.println("execute");
return true;
}
catch(NoSuchElementException e){
return false;
}
}
}
我想在a.findValue()提到的地方用class1的值对class1执行class2的操作;是否可以通过class1 的驱动值变为 class2
当然可以。只需从第二个 class 中删除 WebDriver 的静态关键字,然后使用 WebDriver 创建一个 setter 或构造函数。
在您的第一个 class 中实例化它并使用您的 setter 或构造函数设置 WebDriver。
创建一个 Common class,可以在其中保存常见的东西并用于任何 class:
package keya;
import org.openqa.selenium.NoSuchElementException;
import org.openqa.selenium.WebDriver;
import org.openqa.selenium.firefox.*;
import org.openqa.selenium.By;
public class Common {
protected static WebDriver driver;
public Common(){
driver = new FirefoxDriver();
driver.manage().window().maximize();
}
public boolean isElementPresent(By by){
try{
driver.findElement(by);
return true;
}
catch(NoSuchElementException e){
return false;
}
}
}
你正在测试模块3,代码应该如下:
package keya;
import java.util.List;
import org.openqa.selenium.By;
import org.openqa.selenium.Keys;
import org.openqa.selenium.WebElement;
public class Module3 extends Common{
public static void main(String...strings) throws Exception{
Common c = new Common();
driver.get("webAddress");
driver.findElement(By.xpath("//*[@id='Username']")).sendKeys("A1");
driver.findElement(By.xpath("//*[@id='Password']")).sendKeys("1");
driver.findElement(By.xpath("//*[@id='loginBox']/form/p/button")).click();
Thread.sleep(2000L);
driver.findElement(By.xpath("//*[@id='mainNav']/li[2]/a")).click();
Thread.sleep(2000L);
driver.findElement(By.xpath("//*[@id='addNewEntryButton']")).click();
WebElement dropdown = driver.findElement(By.xpath("//*[@id='timeEntryTable']/tbody/tr[1]/td[1]/select"));
List<WebElement> dropOptions = dropdown.findElements(By.tagName("Option"));
for (int i=0; i<dropOptions.size(); i++)
{
System.out.println(dropOptions.get(i).getText());
}
Thread.sleep(2000L);
driver.findElement(By.xpath("//*[@id='timeEntryTable']/tbody/tr[1]/td[1]/select")).sendKeys(Keys.ARROW_DOWN);
driver.findElement(By.xpath("//*[@id='timeEntryTable']/tbody/tr[1]/td[5]/input")).sendKeys("5");
driver.findElement(By.xpath("//*[@id='timeEntryTable']/tbody/tr[1]/td[6]/input")).sendKeys("5");
driver.findElement(By.xpath("//*[@id='saveEntryButton']")).click();
Thread.sleep(5000L);
driver.findElement(By.xpath("html/body/div[2]/div[2]/div[2]/div/div[3]/div/header/div/button[4]")).click();
//Here is the verification whether Submit button is present or not
c.isElementPresent(By.xpath("//button[contains(.,'submit')]"));
//Rest of the code is here
}
}
因此您可以对任意数量的 class/module 使用 Common class 的 isElementPresent() 方法。您可以通过扩展 Common class 来编写更多 class,这样您就可以使用一些常用方法,并且 WebDriver 仅在 Common class.
中被实例化一次