第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

為了賬號(hào)安全,請(qǐng)及時(shí)綁定郵箱和手機(jī)立即綁定
已解決430363個(gè)問題,去搜搜看,總會(huì)有你想問的

任何重構(gòu)建議

任何重構(gòu)建議

holdtom 2023-09-20 16:23:15
我有一個(gè)很長(zhǎng)的 switch 語句代碼(大約 8 種情況),它決定使用什么搜索來查找瀏覽器中的元素。有什么建議如何重構(gòu)這段代碼嗎?WebElement 當(dāng)前對(duì)象 = null; switch (SearchBy) { case "className": try { CurrentObject = new WebDriverWait(driver, ConstantValues.LONGWAIT) .until(ExpectedConditions.presenceOfElementLocated(By.className(SearchPar))); } catch (Exception e) { System.out.println("未找到元素:" + e); } 休息;    case "cssSelector":        try {            CurrentObject = new WebDriverWait(driver, ConstantValues.LONGWAIT)                    .until(ExpectedConditions.presenceOfElementLocated(By.cssSelector(SearchPar)));        } catch (Exception e) {            System.out.println("Element not found: " + e);        }        break;    case "id":        try {            CurrentObject = new WebDriverWait(driver, ConstantValues.LONGWAIT)                    .until(ExpectedConditions.presenceOfElementLocated(By.id(SearchPar)));        } catch (Exception e) {            System.out.println("Element not found: " + e);        }        break;    case "linkText":        try {            CurrentObject = new WebDriverWait(driver, ConstantValues.LONGWAIT)                    .until(ExpectedConditions.presenceOfElementLocated(By.linkText(SearchPar)));        } catch (Exception e) {            System.out.println("Element not found: " + e);        }        break;    case "name":        try {            CurrentObject = new WebDriverWait(driver, ConstantValues.LONGWAIT)                    .until(ExpectedConditions.presenceOfElementLocated(By.name(SearchPar)));        } catch (Exception e) {            System.out.println("Element not found: " + e);        }        break;   default:        System.out.println(">>> SEARCH BY KEYWORD IS NOT VALID! <<<");    }
查看完整描述

3 回答

?
拉風(fēng)的咖菲貓

TA貢獻(xiàn)1995條經(jīng)驗(yàn) 獲得超2個(gè)贊

Switch-case是許多編程語言中的反模式。為了避免它們,您可以使用一些類似于Replace conditional with polymorphismJava 的技術(shù)。我建議將它們與 一起使用Reflection。這是 Java 的一個(gè)功能。



查看完整回答
反對(duì) 回復(fù) 2023-09-20
?
溫溫醬

TA貢獻(xiàn)1752條經(jīng)驗(yàn) 獲得超4個(gè)贊

我強(qiáng)烈建議不要以這種方式編寫代碼,而是創(chuàng)建一個(gè)框架。


創(chuàng)建一個(gè) SeleniumUtility 類(或任何您想要的名稱)并編寫如下方法: 示例(您可以刪除 WebDriver 驅(qū)動(dòng)程序)


/**

 * Method returns WebElement by Xpath.

 * 

 * @param String xpathExpression

 * @param WebDriver driver

 * @return WebElement

 */

public WebElement getElementByXpath(String xpathExpression, WebDriver driver){

    return driver.findElement(By.xpath(xpathExpression));

}


/**

 * Method returns WebElement by ID.

 * 

 * @param String id

 * @param WebDriver driver

 * @return WebElement

 */

public WebElement getElementByID(String id, WebDriver driver){

    return driver.findElement(By.id(id));

}

或者是這樣的:


/**

 * Method returns By.

 * 

 * @param String identifier Example: xpath,id,name etc

 * @param String expression Example: //*[@class='text']

 * @return By

 */

public By getBy(String identifier, String expression){

    switch (identifier.toLowerCase()) {

    case "xpath":

        return By.xpath(expression);

    case "id":

        return By.id(expression);

    case "name":

        return By.name(expression);

    case "classname":

        return By.className(expression);

    case "cssselector":

        return By.cssSelector(expression);

    case "linktext":

        return By.linkText(expression);

    case "partiallinktext":

        return By.partialLinkText(expression);

    case "tagname":

        return By.tagName(expression);

    default:

        throw new RuntimeException("Invalid identifier passed: " + identifier);

    }

}

在不同的類中編寫顯式等待和流暢等待并反復(fù)使用。


現(xiàn)在你的整個(gè)代碼將是這樣的:


        try {

            CurrentObject = waitTillElementLocated(getBy("cssselector","SearchPar"));

        } catch (Exception e) {

            System.out.println("Element not found: " + e);

        }

或者


        try {

            CurrentObject = waitTillElementLocated(getBy("id","SearchPar"));

        } catch (Exception e) {

            System.out.println("Element not found: " + e);

        }


查看完整回答
反對(duì) 回復(fù) 2023-09-20
?
鳳凰求蠱

TA貢獻(xiàn)1825條經(jīng)驗(yàn) 獲得超4個(gè)贊

如果 searchBy 總是匹配方法名稱,那么我認(rèn)為反射可能是解決方案。

Method searchMethod = By.class.getMethod(searchBy, returnClass.class);
CurrentObject = new WebDriverWait(driver, ConstantValues.LONGWAIT).until(ExpectedConditions.presenceOfElementLocated(searchMethod.invoke(null,searchPar);

您必須捕獲一些可能的異常。


查看完整回答
反對(duì) 回復(fù) 2023-09-20
  • 3 回答
  • 0 關(guān)注
  • 145 瀏覽
慕課專欄
更多

添加回答

舉報(bào)

0/150
提交
取消
微信客服

購(gòu)課補(bǔ)貼
聯(lián)系客服咨詢優(yōu)惠詳情

幫助反饋 APP下載

慕課網(wǎng)APP
您的移動(dòng)學(xué)習(xí)伙伴

公眾號(hào)

掃描二維碼
關(guān)注慕課網(wǎng)微信公眾號(hào)