public void profileSection(String displayName, String fName, String lName, String Address_1,) throws Exception
{
myAccountPageNative(CONSTANTs.MY_ACCOUNT_LINK);
clickLink(CONSTANTs.MY_PROFILE_SECTION);
if(driver.findElement(By.cssSelector(CONSTANTs.DISPLAY_NAME_TXTBOX)).isDisplayed())
{
log.step("Optional..... BUT you will need it when Commenting on any article....");
elementPresent_Click(By.cssSelector(CONSTANTs.DISPLAY_NAME_TXTBOX), displayName);
Thread.sleep(2000);
}else if(driver.findElement(By.cssSelector(CONSTANTs.MYACCT_EMAIL_TXTBOX)).isDisplayed())
{
log.step("Check if Email txtbox is enabled or not...... pls wait.");
txtBoxDisabled(By.cssSelector(CONSTANTs.MYACCT_EMAIL_TXTBOX),null);
Thread.sleep(2000);
log.step("Text box is disabled..... move to next step");
Thread.sleep(2000);
}else if(driver.findElement(By.cssSelector(CONSTANTs.FIRST_NAME)).isDisplayed())
{
log.step("Input First Name......");
txtBoxDisabled(By.cssSelector(CONSTANTs.FIRST_NAME),fName);
Thread.sleep(2000);
}else if(driver.findElement(By.cssSelector(CONSTANTs.LAST_NAME)).isDisplayed())
{
log.step("Input Last Name......");
txtBoxDisabled(By.cssSelector(CONSTANTs.LAST_NAME),lName);
Thread.sleep(2000);
}else if(driver.findElement(By.cssSelector(CONSTANTs.ADDRESS_1)).isDisplayed())
{
log.step("Input Address 1......");
txtBoxDisabled(By.cssSelector(CONSTANTs.ADDRESS_1),Address_1);
Thread.sleep(2000);
}
log.step("Click Save Changes Button......");
txtBoxDisabled(By.cssSelector(CONSTANTs.SAVE_CHANGES_BTN),null);
}
请尝试使用一个开关,而不是太多的if语句。只是为了让我的代码更易读。因为switch只计算一个变量,我能在我的代码中使用switch吗,因为它看起来有点复杂。一个建议,请,因为所有有不同的元素选择使用css选择器。
提前谢谢。
你已经得到了答案,但我仍然试一试。我将使用枚举
来删除 if/else
,并且代码将更加面向对象。顺便说一句 - 除了if/else之外,还有许多其他领域可以改进代码,例如命名约定。
我的测试类
public class MyTest {
public void profileSection(String displayName, String fName, String lName,
String Address_1, String Address_2, String city, String country,
String postcode, String telephone) throws Exception {
myAccountPageNative(CONSTANTs.MY_ACCOUNT_LINK);
clickLink(CONSTANTs.MY_PROFILE_SECTION);
Driver driver = null;
MyEnum.test(driver, displayName, fName, lName, Address_1, Address_2, city, country, postcode, telephone);
MyEnum.SAVE_CHANGES_BTN.doOperation(displayName, fName, lName, Address_1, Address_2, city, country, postcode, telephone);
}
private void clickLink(String myProfileSection) {
// TODO Auto-generated method stub
}
private void myAccountPageNative(String myAccountLink) {
// TODO Auto-generated method stub
}
}
MyEnum类
public enum MyEnum {
DISPLAY_NAME_TXTBOX {
@Override
public void doOperation(String displayName, String fName, String lName,
String Address_1, String Address_2, String city, String country,
String postcode, String telephone) {
elementPresent_Click(By.cssSelector(name()),
displayName);
}
private void elementPresent_Click(Selector cssSelector,
String displayName) {
}
},
MYACCT_EMAIL_TXTBOX {
@Override
public void doOperation(String displayName, String fName, String lName,
String Address_1, String Address_2, String city, String country,
String postcode, String telephone) {
txtBoxDisabled(By.cssSelector(name()), null);
}
private void txtBoxDisabled(Selector cssSelector, Object object) {
}
},
FIRST_NAME {
@Override
public void doOperation(String displayName, String fName, String lName,
String Address_1, String Address_2, String city, String country,
String postcode, String telephone) {
txtBoxDisabled(By.cssSelector(name()), fName);
}
private void txtBoxDisabled(Selector cssSelector, Object object) {
}
},
LAST_NAME {
@Override
public void doOperation(String displayName, String fName, String lName,
String Address_1, String Address_2, String city, String country,
String postcode, String telephone) {
txtBoxDisabled(By.cssSelector(name()), lName);
}
private void txtBoxDisabled(Selector cssSelector, Object object) {
}
},
ADDRESS_1 {
@Override
public void doOperation(String displayName, String fName, String lName,
String Address_1, String Address_2, String city, String country,
String postcode, String telephone) {
txtBoxDisabled(By.cssSelector(name()), Address_1);
}
private void txtBoxDisabled(Selector cssSelector, Object object) {
}
},
SAVE_CHANGES_BTN {
@Override
public void doOperation(String displayName, String fName, String lName,
String Address_1, String Address_2, String city, String country,
String postcode, String telephone) {
}
};
public static void test(Driver driver, String displayName, String fName, String lName,
String Address_1, String Address_2, String city, String country,
String postcode, String telephone) {
for(MyEnum enum1 : MyEnum.values()) {
if(driver.findElement(By.cssSelector(enum1.name())).isDisplayed()) {
enum1.doOperation(displayName, fName, lName, Address_1, Address_2, city, country, postcode, telephone);
}
}
}
abstract public void doOperation( String displayName, String fName, String lName,
String Address_1, String Address_2, String city, String country,
String postcode, String telephone);
}
你在这里有一个误解(对于一个新程序员来说,这是完全可以理解的)。
你似乎认为在if/else上使用一个开关会使你的代码更易读,事实是它很可能不会。那么,如何让你的代码更具可读性呢?简单,去掉你所有的重复。
例如,你在每个if/else中调用一个Thread.sleep
。而是把它拉出来,放在你的if/else语句之后。
你可以做的另一件事是你可以把你的find元素移动到你的类的顶部它们自己的变量中。然后简单地在它们上面调用< code > is display
示例:
displayNameTextbox = driver.findElement(By.cssSelector(CONSTANTs.DISPLAY_NAME_TXTBOX));
if(displayNameTextbox.isDisplayed())
{
log.step("Optional..... BUT you will need it when Commenting on any article....");
elementPresent_Click(By.cssSelector(CONSTANTs.DISPLAY_NAME_TXTBOX), displayName);
}
因为这似乎在Selenium中,所以我实际上建议创建一个Page对象,并使用它来简化您的代码。
另一件要注意的事情是,你可以把这些if分成它们自己的方法,并在必要的时候检查它们,而不是一次检查所有的方法。但这更取决于你打算如何使用它。
我认为这可能是一个更合适和优雅的解决方案。构建要检查的元素的数组并循环遍历这些元素。
public void profileSection(String displayName, String fName, String lName, String Address_1,
String Address_2, String city, String country,
String postcode, String telephone) throws Exception
{
myAccountPageNative(CONSTANTs.MY_ACCOUNT_LINK);
clickLink(CONSTANTs.MY_PROFILE_SECTION);
String [] elementNames = new String [] {
CONSTANTs.DISPLAY_NAME_TXTBOX,
CONSTANTs.MYACCT_EMAIL_TXTBOX,
CONSTANTs.FIRST_NAME,
CONSTANTs.LAST_NAME,
CONSTANTs.ADDRESS_1
};
for (String elementName : elementNames) {
if(driver.findElement(By.cssSelector(elementName)).isDisplayed()) {
elementPresent_Click(By.cssSelector(elementName), displayName);
Thread.sleep(2000);
break; // when found break out of loop
}
}
log.step("Click Save Changes Button......");
txtBoxDisabled(By.cssSelector(CONSTANTs.SAVE_CHANGES_BTN),null);
}
对于Java 8,我有以下代码: 我想转换成lambda风格, 使用像这样的< code>ifExist方法: 但现在我还有其他案例可以调用: 我可以写一个类似的< code>ifNotExist,我希望它们是互斥的(如果< code>Exist条件为真,就不需要检查< code>ifNotExist,因为有时候,exist()方法检查起来工作量太大),但是我总是要检查两次。我该如何避免呢? 也许
我正在浏览使用替换的Jaxb继承的Blaise's Bloghttp://blog.bdoughan.com/2010/11/jaxb-and-inheritance-using-substitution.html。 我想实现相同的功能,但不想实现根元素。我将这种类型的XML视为输出。 以下是配置。Java语言 Customer.java 住址Java语言 电话号码。Java语言 Demo.jav
所以我正在尝试制作一个程序,它将使用HashMap计算一个唯一单词出现在一个小文件中的次数。但是,当我尝试通过在我的HashMap上使用. get(key)来增加重复单词的计数时,它返回true而不是我想要转换为的整数值。如何让我的代码返回值而不是布尔值?这是我到目前为止的代码: 我的FindCommons类: 导入java。util。ArrayList;公共类FindCommons{ }
我有以下课程: 以及物品的收集。我想知道集合中最后一项的名称。为此,我只需遍历所有集合并使用last。问题是我不知道为什么它强迫我使用单元素字符串数组。 为什么我必须使用: 而不是:
我有可选的问题,我不知道如何处理它。 如何将此if更改为可选?
问题内容: 我试图例如仅获取对象bob的ID列表,而不是bob的列表。可以使用HQL请求,但是我想知道是否可以使用条件? 一个例子 : 问题答案: 我认为您可以使用Projections做到这一点,例如