具有类似元素的Selenium Webdriver C#页面
我有4页,内容和功能非常相似。但是,这些元素都有不同的ID,具体取决于您所在的页面。目前,我已经按照如下方式构造了它们(示例类A和类B)。我想重构它,因为这两个类之间的所有方法都是相同的,但我不知道如何进行重构,因为元素具有不同的ID(我使用PageFactory,但我也愿意不使用它) 非常感谢您的任何见解具有类似元素的Selenium Webdriver C#页面,c#,class,selenium,webdriver,C#,Class,Selenium,Webdriver,我有4页,内容和功能非常相似。但是,这些元素都有不同的ID,具体取决于您所在的页面。目前,我已经按照如下方式构造了它们(示例类A和类B)。我想重构它,因为这两个类之间的所有方法都是相同的,但我不知道如何进行重构,因为元素具有不同的ID(我使用PageFactory,但我也愿意不使用它) 非常感谢您的任何见解 public class A : BaseClass { [FindsBy(How = How.Id, Using = "ALoginId"] public IWebElem
public class A : BaseClass
{
[FindsBy(How = How.Id, Using = "ALoginId"]
public IWebElement Login {get; set;}
[FindsBy(How = How.Id, Using = "APassword"]
public IWebElement Password {get; set;}
[FindsBy(How = How.Id, Using = "ALoginBtn"]
public IWebElement LoginBtn {get; set;}
public void Login()
{
Login.SendKeys("username");
Password.SendKeys("password");
LoginBtn.Click();
}
}
public class B : BaseClass
{
[FindsBy(How = How.Id, Using = "BLoginId"]
public IWebElement Login {get; set;}
[FindsBy(How = How.Id, Using = "BPassword"]
public IWebElement Password {get; set;}
[FindsBy(How = How.Id, Using = "BLoginBtn"]
public IWebElement LoginBtn {get; set;}
public void Login()
{
Login.SendKeys("username");
Password.SendKeys("password");
LoginBtn.Click();
}
}
若有类似的其他字段,比如name,class,你们可以用它来代替id 此外,以下是您可以使用的方法:
public class A : BaseClass
{
private String loginWindow;
[FindsBy(How = How.Id, Using = "ALoginId"]
public IWebElement Login {get; set;}
[FindsBy(How = How.Id, Using = "APassword"]
public IWebElement Password {get; set;}
[FindsBy(How = How.Id, Using = "ALoginBtn"]
public IWebElement LoginBtn {get; set;}
[FindsBy(How = How.Id, Using = "BLoginId"]
public IWebElement Loginb {get; set;}
[FindsBy(How = How.Id, Using = "BPassword"]
public IWebElement Passwordb {get; set;}
[FindsBy(How = How.Id, Using = "BLoginBtn"]
public IWebElement LoginBtnb {get; set;}
public A(Srting loginwindow){
this.loginWindow; = loginwindow;
}
public void Login()
{
if(loginwindow.equals("A")) {
Login.SendKeys("username");
Password.SendKeys("password");
LoginBtn.Click();
}
elseif(loginwindow.equals("B")){
Loginb.SendKeys("username");
Passwordb.SendKeys("password");
LoginBtnb.Click();
}
else{
throws new Execption("Please provide correct login Window name")
}
}
}
请参见下面的示例 我的测试是
//MAximize the Screen
driver.manage().window().maximize();
//Go to Gmail Login Page
SignInPage SignInPage = WebUtils.GoToSignInPage(driver);
//Sign in to Login page -Send Username
SignInPage.SendkeysMethodForSignInPAge(driver, By.cssSelector("input[id='Email']") , "kishanpatelllll.8@gmail.com" );
//Click on Next
SignInPage.ClickToLogin(driver, By.cssSelector("input[id='next']"));
//Wait for password field to be visible
SignInPage.WaitForElementTobeVisible(driver, By.cssSelector("input[id='Passwd'][type='password']"));
因此,当我调用sendKeysMethodForSigningPage方法时,我不会在@Test中编写它
请参阅SendKeysMethod以了解SigningPage方法:
public class SignInPage {
public void SendkeysMethodForSignInPAge(WebDriver driver, By by, String s) {
WebUtils.Sendkeys(driver,by,s);
}
}
所以sendkeys是一种常见的方法,它将在任何地方使用,所以它将在一个名为webutils的类中使用
public class WebUtils {
public static void Sendkeys(WebDriver driver, By by, String s) {
WebElement Element = driver.findElement(by);
Element.clear();
Element.sendKeys(s);
}
}
我创建了一个新类,并在那里定义了它。这是基本流程。希望你能联系到这一点。回答我,如果你仍然被卡住。快乐学习:-)你懂一点JAVA吗。我可以用JAVA来展示它,我只能说在[FindsBy(How=How.Id,Using=“ALoginId”]public IWebElement Login{get;set;}下保持Using=some变量并将Login改为元素:[FindsBy(How=How.Id,Using=string)public IWebElement{get;set;}现在,通过用户名、密码和登录按钮的3种不同方法传递此元素和字符串。抱歉,我不知道C#。希望您能理解它?请回答:-)我知道Java,因此如果您能给我一个示例,我将不胜感激。抱歉,答复太晚了。请查看我的答复。请随时询问您是否被卡住。工作量相同:(.我试图争取的是能够完成一次而不是多次登录功能。在上面的方法中,您只有一个登录功能是的,但我试图多次编写以下3行代码。{Loginb.SendKeys(“用户名”);Passwordb.SendKeys(“密码”);LoginBtnb.Click();}.问题是没有多个方法,但这些方法的内容基本相同。如果可能的话,这就是我试图避免的。