我正在尝试创建一个可以自动向DM中的人发送消息的机器人。我可以通过在此处使用此代码向第一个人发送消息,返回并向第二个人发送消息。
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();
但这效率不高,因为如果使用此方法,则必须为每个新索引都换一行。
有人知道如何将其重写为更有效的样式吗?
答案 0 :(得分:0)
您可以使用for循环和实际的联系人数量。在这里,我认为这是一个range()
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();
答案 1 :(得分:0)
请尝试以下操作:
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();
}
}