Мне нужен более эффективный способ обработки нескольких индексов в числовом порядке - PullRequest
0 голосов
/ 25 февраля 2019

Я пытаюсь создать бота, который может автоматически отправлять сообщения людям из моей DM.Я получил это сообщение от первого лица, GO BACK, и сообщение второму человеку, используя этот код здесь.

By path3 = By.xpath("//android.widget.LinearLayout[@index='1']"); 
driver.findElement(path3).click(); 

By path4 = By.xpath("//*[@text='Message…']");
driver.findElement(path4).sendKeys("Hello");

 driver.findElement(By.id("com.instagram.android:id/row_thread_composer_button_send")).click();
Thread.sleep(5000);
driver.findElement(By.id("com.instagram.android:id/action_bar_button_back")).click();

By path5 = By.xpath("//android.widget.LinearLayout[@index='2']"); 
driver.findElement(path5).click();

By path6 = By.xpath("//*[@text='Message…']");
driver.findElement(path6).sendKeys("Hello");

driver.findElement(By.id("com.instagram.android:id/row_thread_composer_button_send")).click();
Thread.sleep(5000);
driver.findElement(By.id("com.instagram.android:id/action_bar_button_back")).click();

Но это неэффективно, потому что если я использую этот метод, мне придется сделатьновая строка для каждого нового индекса.

Кто-нибудь знает, как переписать это в более эффективный стиль?

Ответы [ 2 ]

0 голосов
/ 25 февраля 2019

Пожалуйста, попробуйте это:

public void sendMsg() {

    List<MobileElement> paths = (List<MobileElement>) driver.findElements(By.xpath("//*[@class='android.widget.LinearLayout']"));
    WebDriverWait wait = new WebDriverWait(driver, 30);

      for (MobileElement path : paths) 
       {
        By path4 = By.xpath("//*[@text='Message…']");
        driver.findElement(path4).sendKeys("Hello");
         driver.findElement(By.id("com.instagram.android:id/row_thread_composer_button_send")).click();
         wait.until(ExpectedConditions.elementToBeClickable(driver.findElement(By.id("com.instagram.android:id/action_bar_button_back"))));
         driver.findElement(By.id("com.instagram.android:id/action_bar_button_back")).click();


    }

}
0 голосов
/ 25 февраля 2019

Вы можете использовать цикл for и фактическое количество контактов.Здесь я предположил, что это был диапазон ()

contacts = range(10)
for x in contacts:
    By path3 = By.xpath("//android.widget.LinearLayout[@index='{0}']".format(x);
    driver.findElement(path3).click();

    By path4 = By.xpath("//*[@text='Message…']");
    driver.findElement(path4).sendKeys("Hello");

    driver.findElement(By.id("com.instagram.android:id/row_thread_composer_button_send")).click();
    Thread.sleep(5000);
    driver.findElement(By.id("com.instagram.android:id/action_bar_button_back")).click();
...